﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


using Modelo_ETdA.Negocio.Analise;
using Modelo_ETdA.Negocio.Analise.Formato;
using Modelo_ETdA.Negocio.Analise.Avaliacao;
using Modelo_ETdA.Negocio.AmbienteComercial;


namespace Modelo_ETdA.Interface
{

    public partial class VerAvaliacaoProfissional : Form
    {

        private DataTable tabela = new DataTable();
        private GestorAnalise gAnalise;
        private FormatoAvaliacaoProfissional form_pro;
        private List<Consideracao> consideracoes;
        private List<FormularioAvaliacao> l_fa;
        private MenuAnaliseETdA mAnaliseEtda;
        List<Avaliacao> avaliacoes;
        AmbienteComercial ambC;
        VerAvaliacaoProfissional next;
        VerAvaliacaoProfissional anterior;
        int index;
        int codAval;

        public VerAvaliacaoProfissional(MenuAnaliseETdA ant, VerAvaliacaoProfissional anterior, int codAval, GestorAnalise gAnalise,
            FormatoAvaliacaoProfissional form_pro, List<Consideracao> consideracoes, AmbienteComercial ambC, int index, List<Avaliacao> laval)
        {
            InitializeComponent();
            mAnaliseEtda = ant;
            this.index = index;
            this.form_pro = form_pro;
            this.consideracoes = consideracoes;
            this.ambC = ambC;
            if (laval == null)
                avaliacoes = gAnalise.consultaAvaliacao(codAval, 2);
            else
                avaliacoes = laval;
            this.codAval = codAval;
            this.anterior = anterior;

            if (form_pro == null)
            {
                this.form_pro = (FormatoAvaliacaoProfissional)gAnalise.consultaFormatoAvaliacao(avaliacoes[0].CodForm, 2, ambC.Cabeçalho.Cod);
            }
            else
                this.form_pro = form_pro;
            nomeFormato.Text = this.form_pro.Doc_cabecalho.Nome;

            tabela.Columns.Add("cod");
            tabela.Columns["cod"].ReadOnly = true;
            tabela.Columns.Add("Consideração");
            tabela.Columns["Consideração"].ReadOnly = true;
            tabela.Columns.Add("Avaliação");
            tabela.Columns.Add("Mínimo Escala");
            tabela.Columns["Mínimo Escala"].ReadOnly = true;
            tabela.Columns.Add("Máximo Escala");
            tabela.Columns["Máximo Escala"].ReadOnly = true;

            inicializaTabela();

            tabelaCons.DataSource = tabela;
            tabelaCons.Columns["cod"].Visible = false;
            tabelaCons.Columns["Consideração"].Width += 100;
            tabelaCons.Columns["Avaliação"].Width += 10;
            tabelaCons.Columns["Mínimo Escala"].Width += 10;
            tabelaCons.Columns["Máximo Escala"].Width += 10;

            FormularioAvaliacao aval;

            aval = (FormularioAvaliacao)avaliacoes[index];
            nomeAval.Text = aval.Doc_cabecalho.Nome;


            cDiv.Text = getDescDiv(aval.CodDivisao);
            if (anterior == null)
                anter.Visible = false;

            if (avaliacoes.Count - 1 == index)
                Seg.Visible = false;

        }

        private void inicializaTabela()
        {
            int i = 0;
            DataRow workRow;
            tabela.Clear();
            foreach (Consideracao cons in consideracoes)
            {
                workRow = tabela.NewRow();
                workRow["cod"] = form_pro.MapConsideracaoQuestao[cons.Cod].CodConsideracao;
                workRow["Consideração"] = cons.Descricao;
                workRow["Avaliação"] = "" + avaliacoes[index].Respostas[i].ValorResposta;
                workRow["Mínimo Escala"] = form_pro.MapConsideracaoQuestao[cons.Cod].EscalaMin;
                workRow["Máximo Escala"] = form_pro.MapConsideracaoQuestao[cons.Cod].EscalaMax;
                tabela.Rows.Add(workRow);
                i++;
            }
        }

        private string getDescDiv(int cod)
        {
            List<Divisao> lista = ambC.listDivisao;
            string ret = "";
            foreach (Divisao div in lista)
            {
                if (div.CodRelativo == cod)
                {
                    ret = div.Descricao;
                    break;
                }
            }
            return ret;
        }

        private void voltar_Click(object sender, EventArgs e)
        {
            mAnaliseEtda.Visible = true;
            this.Visible = false;
        }

        private void guardar_Click(object sender, EventArgs e)
        {
            try
            {
                anterior.Visible = true;
                this.Visible = false;
            }
            catch (Exception exp)
            {
                MessageBox.Show("Erro ao consultar avaliação.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void Seg_Click(object sender, EventArgs e)
        {
            try{
            next = new VerAvaliacaoProfissional(mAnaliseEtda, this, codAval, gAnalise, form_pro, consideracoes, ambC, index + 1, avaliacoes);
            next.Visible = true;
            this.Visible = false;
            }
            catch (Exception exp)
            {
                MessageBox.Show("Erro ao consultar avaliação.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void VerAvaliacaoProfissional_FormClosed(object sender, FormClosedEventArgs e)
        {
            mAnaliseEtda.sair();
        }



    }
}
